package cache

import (
	"gitee.com/gousing/cache/driver"
	"gitee.com/gousing/cache/storage"
)

// Storager 缓存驱动统一接口
type Storager = storage.Storager

// EntryOptions 缓存项选项, 用于配置缓存行为, 如过期时间、标签等
type EntryOptions = storage.EntryOptions

// WithTags 设置缓存 Tags 标签, 可以设置多个标签, 默认为空切片 []string{}
var WithTags = storage.WithTags

// WithExpire 设置过期时间, 最小为1秒, 0 表示不过期, 默认为 Cache Driver => DefaultExpire
var WithExpire = storage.WithExpire

// WithTimeout 设置超时时间, 最小为1秒, 默认为3s (部分场景使用, 如: LoadDo, UpdateFn 等场景使用), 默认为3s
var WithTimeout = storage.WithTimeout

// MemoryOptions 缓存配置选项结构体
//   - 关于单个缓存项最大数据大小限制为 MaxSize/CacheShardCount
//   - 如 MaxSize 为 128MB, CacheShardCount 为 128 个分片，则单个缓存项最大数据大小为 128*1024*1024/128 = 1MB
//   - 如 MaxSize 为 64MB, CacheShardCount 为 128 个分片，则单个缓存项最大数据大小为 64*1024*1024/128 = 512KB
//   - 如 MaxSize 为 32MB, CacheShardCount 为 128 个分片，则单个缓存项最大数据大小为 32*1024*1024/128 = 256KB
type MemoryOptions = driver.MemoryOptions

// NewMemory 创建一个新的 Memcache 实例
var NewMemory = driver.NewMemory

// NewMemoryDefault 创建一个新的 Memcache 实例, 使用默认配置信息
//   - MaxSize:         128 // MB
//   - CacheShardCount: 128
//   - TagShardCount:   32
//   - DefaultExpire:   0
//   - CleanupInterval: time.Minute
var NewMemoryDefault = driver.NewMemoryDefault

// RedisOptions Redis缓存配置信息
type RedisOptions = driver.RedisOptions
type RedisUniversalOptions = driver.RedisUniversalOptions

// NewRedis 创建一个新的 Redis 实例, 使用默认配置信息
var NewRedis = driver.NewRedis

// NewRedisDefault 创建一个新的 Redis 实例, 使用默认配置信息
//   - Addrs:         []string{"localhost:6379"} 无密码连接
var NewRedisDefault = driver.NewRedisDefault

// L2CacheOptions 缓存配置选项，用于初始化 L2 缓存实例时设置相关参数
//
//	预留配置选项，后续扩展使用
type L2CacheOptions = driver.L2CacheOptions

// NewL2Cache 创建并初始化一个 L2Cache 二级缓存实例
//   - 需要传入 local 和 remote 缓存驱动实例  (通常为 MemoryCache + RedisCache)
var NewL2Cache = driver.NewL2Cache

// NewL2CacheDefualt 创建一个新的 L2Cache 二级缓存实例, 使用默认配置信息
//   - local 默认使用 NewMemoryDefault 创建
//   - remote 默认使用 NewRedisDefault 创建
var NewL2CacheDefualt = driver.NewL2CacheDefualt
